package br.com.news.web;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import br.com.news.utils.database.beans.CategoriaUsuarioBean;
import br.com.news.utils.database.beans.UsuarioBean;
import br.com.news.utils.service.exception.ServiceException;
import br.com.news.web.service.UsuarioService;
import br.com.news.web.session.UserSession;

/**
 * ManagedBean para controlar o login e logout da aplicação
 * 
 * @author Jefferson
 * @since 25/04/2013
 */
@ManagedBean
public class LoginMB extends BaseMB{

	private static final long serialVersionUID = 1312185781296517016L;
	
	@ManagedProperty("#{userSession}")
	private UserSession userSession;
	@ManagedProperty("#{usuarioService}")
	private UsuarioService usuarioService;
	private UsuarioBean usuarioBean;
	
	private List<CategoriaUsuarioBean> categoriasUsuario;
	

	public void logar() {
		try {
			if (validaLogin()) {
				usuarioBean = usuarioService.autenticar(usuarioBean);
				if (usuarioBean != null) {
					userSession.setUsuarioBean(usuarioBean);
					userSession.setCategoriasUsuario(getCategoriaUsuarioservice().buscaCategoriaDoUsuario(userSession.getUsuarioBean().getLogin()));
				} else {
					addInfoMessage("loginForm", "Senha ou Login inválidos!");
				}
			}
		} catch (ServiceException e) {
			addErrorMessage("loginForm", "Ocorreu uma falha a logar! Favor entrar em contato com o suporte!");
		}
	}
	
	public String sair() {
		userSession.logout();
		return "index";
	}
	
	private boolean validaLogin(){
		boolean valida = true;
		if(usuarioBean.getLogin() == null || usuarioBean.getLogin().isEmpty()){
			addInfoMessage("loginForm", "O Usuário deve ser preenchido!");
			valida = false;
		}
		
		if(usuarioBean.getSenha() == null || usuarioBean.getSenha().isEmpty()){
			addInfoMessage("loginForm", "A Senha deve ser preenchido!");
			valida = false;
		}
		
		return valida;
	}
	
	public String dadosPessoais() {
		if (userSession != null) {
			return "dadosPessoais.xhtml";
		}
		return null;
	}

	public UsuarioBean getUsuarioBean() {
		if(usuarioBean == null ) usuarioBean = new UsuarioBean() ;
		return usuarioBean;
	}
	
	public void setUsuarioBean(UsuarioBean usuarioBean) {
		this.usuarioBean = usuarioBean;
	}

	public UserSession getUserSession() {
		return userSession;
	}

	public void setUserSession(UserSession userSession) {
		this.userSession = userSession;
	}

	public UsuarioService getUsuarioService() {
		return usuarioService;
	}
	
	public String cadastrar() {
		return "cadastro";
	}

	public void setUsuarioService(UsuarioService usuarioService) {
		this.usuarioService = usuarioService;
	}

	public List<CategoriaUsuarioBean> getCategoriasUsuario() {
		if (userSession != null && userSession.getUsuarioBean() != null && userSession.getUsuarioBean().getLogin() != null) {
			categoriasUsuario = getCategoriaUsuarioservice().buscaCategoriaDoUsuario(userSession.getUsuarioBean().getLogin());
		}
		
		return categoriasUsuario == null ? new ArrayList<CategoriaUsuarioBean>() : categoriasUsuario;
	}

	public void setCategoriasUsuario(List<CategoriaUsuarioBean> categoriasUsuario) {
		this.categoriasUsuario = categoriasUsuario;
	}
	
	
	
}
